#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
启动学生管理系统脚本
不使用调试模式以保持应用稳定运行
"""

import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 导入应用工厂和数据库相关组件
from app import create_app, db, bcrypt
from app.models import User, Major, Student

# 使用应用工厂创建app实例
app = create_app()

def init_and_start():
    print("初始化数据库并启动学生管理系统...")
    
    try:
        # 使用Flask应用上下文初始化数据库
        with app.app_context():
            # 创建所有数据库表
            db.create_all()
            print('MySQL数据库表结构创建完成')
            
            # 检查各表数据
            print(f'学生表中有 {Student.query.count()} 条记录')
            print(f'专业表中有 {Major.query.count()} 条记录')
            
            # 确保默认管理员账户存在
            if User.query.filter_by(username='admin').first() is None:
                hashed_password = bcrypt.generate_password_hash('admin123').decode('utf-8')
                admin = User(username='admin', email='admin@example.com', password=hashed_password, role='admin')
                db.session.add(admin)
                db.session.commit()
                print('默认管理员账户已创建')
            else:
                print('管理员账户已存在')
        
        print('\n学生管理系统启动中...')
        print('访问地址: http://127.0.0.1:5000')
        print('按 Ctrl+C 停止服务')
        
        # 启动应用，关闭调试模式
        app.run(debug=False, host='0.0.0.0', port=5000)
        
    except Exception as e:
        print(f'启动过程中发生错误: {e}')
        sys.exit(1)

if __name__ == '__main__':
    init_and_start()